/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function (nums) {
  let len = nums.length;
  let sum = 0;
  let max = nums[0];
  for (let i = 0; i < len; i++) {
    if (sum > 0) {
      sum += nums[i]
    } else {
      sum = nums[i]
    }
    max = Math.max(max, sum);
  }
  return max;
};

/**
 * @param {number[]} nums
 * @return {number}
 */
/* 
要解决这个问题，可以使用 Kadane 算法，它能在线性时间内找到最大子数组和。以下是具体的方法思路和代码实现：

方法思路
动态规划思想：维护两个变量，currentMax表示以当前元素结尾的最大子数组和，globalMax表示遍历过程中遇到的最大子数组和。
状态转移：对于每个元素，选择将其加入当前子数组（如果这样能使和更大），或者以它为起点开始一个新的子数组。
初始条件：currentMax和globalMax初始化为数组的第一个元素，因为至少包含一个元素。
*/
var maxSubArray = function (nums) {
  if (nums.length === 0) return 0;

  let currentMax = nums[0];
  let globalMax = nums[0];

  for (let i = 1; i < nums.length; i++) {
    currentMax = Math.max(nums[i], currentMax + nums[i]);
    globalMax = Math.max(globalMax, currentMax);
  }

  return globalMax;
};